//
//  ZYXLOLDataRefreshViewController.m
//  OCUIBasis
//  UITableViewCell 数据刷新 看控制台NSLog的打印日志体会刷新思想
//

#import "ZYXLOLDataRefreshViewController.h"
#import "ZYXHero.h"

@interface ZYXLOLDataRefreshViewController () <UITableViewDataSource , UITableViewDelegate , UIAlertViewDelegate>

@property (nonatomic ,weak )  IBOutlet UITableView *tableView;

@property (nonatomic, strong) NSArray *heros;

@end

@implementation ZYXLOLDataRefreshViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    // 设置行高(每一行的高度一致)
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    self.tableView.rowHeight  = 100;
}

- (NSArray *)heros
{
    if (_heros == nil) {
        NSString *path = [[NSBundle mainBundle] pathForResource:@"heros.plist" ofType:nil];
        NSArray *dictArray = [NSArray arrayWithContentsOfFile:path];
        NSMutableArray *heroArray = [NSMutableArray array];
        for (NSDictionary *dict in dictArray) {
            ZYXHero *hero = [ZYXHero heroWithDict:dict];
            [heroArray addObject:hero];
        }
        _heros = heroArray;
    }
    return _heros;
}


- (BOOL)prefersStatusBarHidden
{
    return YES;
}





#pragma mark - 数据源方法

//该UITableView 显示多少行数据
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"numberOfRowsInSection-----");
    return self.heros.count;
}

// 离开屏幕的cell会怎样

/**
 *  每当有一个cell进入视野范围内,就会调用
 */
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"cellForRowAtIndexPath-----%lu", (long)indexPath.row);
    
    // static修饰局部变量:可以保证局部变量只分配一次存储空间(只初始化一次)
    static NSString *ID = @"hero";
    
    // 1.通过一个标识去缓存池中寻找可循环利用的cell
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
    
    // 2.如果没有可循环利用的cell
    if (cell == nil){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
    }
    
    // 3.给cell设置新的数据
    // 取出模型
    ZYXHero *hero = self.heros[indexPath.row];
    // 设置cell的数据
    cell.textLabel.text = hero.name;
    cell.detailTextLabel.text = hero.intro;
    cell.imageView.image = [UIImage imageNamed:hero.icon];
    
    return cell;
}








#pragma mark - UITableViewDelegate  代理方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath------");
    
    // 1.取得被点击这行对应的模型
    ZYXHero *hero = self.heros[indexPath.row];
    
    // 弹框
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"数据展示" message:nil delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    
    //alert.delegate = self;
    
    
    // 设置对话框的类型
    alert.alertViewStyle = UIAlertViewStylePlainTextInput;
    
    // 取得唯一的那个文本框,显示英雄的名称
    [alert textFieldAtIndex:0].text = hero.name;
    
    [alert show];
    
    // 绑定行号到alertView上
    alert.tag = indexPath.row;
}








#pragma mark - UIAlertViewDelegate  代理方法

/**
 *  点击了alertView上面的按钮就会调用这个方法
 *
 *  @param buttonIndex 按钮的索引,从0开始
 */
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    NSLog(@"clickedButtonAtIndex------");
    
    if (buttonIndex == 0) {
        NSLog(@"clickedButtonAtIndex---取消---");
        return;
    }
    
    // 1.取得文本框最后的文字
    NSString *name = [alertView textFieldAtIndex:0].text;
    //    int row = alertView.tag;
    //    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
    //    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path];
    //    cell.textLabel.text = name;
    
    // 2.修改模型数据
    long row = alertView.tag;
    ZYXHero *hero = self.heros[row];
    hero.name = [name stringByAppendingString:@"刷新后..."];
    
    // 3.告诉tableView重新加载模型数据
    // reloadData : tableView会向数据源重新请求数据
    // 重新调用数据源的相应方法取得数据
    // 重新调用数据源的tableView:numberOfRowsInSection:获得行数
    // 重新调用数据源的tableView:cellForRowAtIndexPath:得知每一行显示怎样的cell
    // 全部刷新
    //    [self.tableView reloadData];
    
    // 局部刷新
    NSIndexPath *path = [NSIndexPath indexPathForRow:row inSection:0];
    [self.tableView reloadRowsAtIndexPaths:@[path] withRowAnimation:UITableViewRowAnimationLeft]; // Top  Bottom  Right
}





@end
